//3 静止敌机
//4 敌机移动
//5 击中敌机
//6 更新清屏功能

//7 随着积分增加，加快敌机下落速度
//8 防止玩家操控飞机飞出边界
//9 尝试实现复杂的多字符飞机图形
//10 按esc键后游戏暂停


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>


int position_x,position_y;		//飞机位置
int bullet_x,bullet_y;		//子弹位置
int height,width;		//游戏画面尺寸
int enemy_x,enemy_y;		//敌机位置
int score;		//游戏得分


void gotoxy(int x,int y)		//光标移动到(x,y)位置
{
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(handle,pos);
}


void HideCursor()         //隐藏光标
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
	SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);
}



void startup()
{
	height=20;
	width=60;

	position_x=height/2;
	position_y=width/2;

	bullet_y=position_y;
	bullet_x=-1;

	enemy_x=0;
	enemy_y=width/2;

	score=0;

	HideCursor();
}


void show()
{
	gotoxy(0,0);
	int i,j;


	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{
			if((i==position_x)&&(j==position_y))
				printf("*");		//输出飞机“*”
			if((i==position_x+1)&&(j==position_y-2))
				printf("*****");
			if((i==position_x+2)&&j==position_y-1)
				printf("* *");
			else if((i==bullet_x)&&(j==bullet_y))
				printf("|");		//输出子弹
			else if((i==enemy_x)&&(j==enemy_y))
				printf("@");		//输出敌机
			else
				printf(" ");
		}
		printf("\n");
	}
	printf("得分：%d\n",score);
}



void updateWithoutInput()
{
	static int limit=10;
	if((bullet_x==enemy_x)&&(bullet_y==enemy_y))
	{
		score++;
		if(score>0 && score%3==0 && limit>0)		//分数增加，敌机加速
			limit--;
		enemy_x=0;
		enemy_y=rand()%width;
		bullet_x=-1;
	}


	static int speed=0;		//静态变量,用于控制敌机下落速度


		
	if(bullet_x>-1)
		bullet_x--;		//子弹上打

	if(enemy_x>height)
		{
			enemy_x=0;
			enemy_y=rand()%width;
		}
	
	if(speed<limit)
		speed++;
	if(speed==limit)		//敌机下落
	{
		enemy_x++;
		speed=0;
	}
	
}

void updateWithInput()
{
	char input;

	if(kbhit())		//当按键时执行
	{
		input=getch();

		if(input=='a'&&position_y>2)
			position_y--;
		if(input=='d'&&position_y<width-2)
			position_y++;
		if(input=='w'&&position_x>0)
			position_x--;
		if(input=='s'&&position_x<height-3)
			position_x++;
		if(input==' ')
		{
			bullet_x=position_x-1;
			bullet_y=position_y;
		}
        if(input==27)
			system("pause");
	}
}


int main()
{
	startup();		//数据初始化
	while(1)		//游戏循环执行
	{
		show();		//显示画面
		updateWithoutInput();	//与用户输入无关的更新
		updateWithInput();		//与用户输入有关的更新
	}
	return 0;
}
